The use of digital color images has grown rapidly over the past two decades in a wide variety of applications such as digital cameras and Web pages. Because digital color images are often very large files, compression is desirable to reduce the size of the files for storage and transmission purposes. By reducing the size of files, more digital images may be fit on a storage medium, such as a hard drive or a CD-ROM. Further, digital images may be transferred quicker using bandwidth limited transmission media, such as telephone lines and USB cables.
Currently, the most widely used method of compressing static digital images is the JPEG (Joint Photographic Experts Group) standard. However, a wide variety of other compression techniques have been developed for compressing both digital static images and digital video images. The various techniques have been employed in a multitude of compression image file formats, such as TIFF (Tag Image File Format), JPEG (Joint Photographic Expert Group), PNG (Portable Network Graphics), MPEG (Motion Pictures Expert Group), and WMV (Windows Media Video), for example.
In developing the various image compression codecs (encoder/decoder), the focus has been primarily on the compression/decompression techniques and the file formats. As a result, most current image compression codecs are not aware of specific details about the color space in which the original bitmap pixel data for an image resides. For example, JPEG assumes that input images reside in an RGB (red/green/blue) color coordinate space with 8 bpcc (bits per color channel) and a gamma value of 2.2. Moreover, the codecs do not support the ability to programmatically change the various aspects of an image's color space, such as bit format, tone reproduction curve (or gamma), and color space primaries. Accordingly, compression and decompression using current image codecs results in the same original and output color spaces. To change the color space of an image, processing must be performed on the image outside of the codec.
Referring to FIG. 2, a block diagram of the compression and, decompression of a color image using a current codec is generally illustrated. An input bitmap 202 is compressed by an encoder 204 and the compressed data 206 is stored and/or transmitted. The compressed data 206 may then be decompressed by a decoder 208, which provides an output bitmap 210. The output bitmap 210 from the decoder 208 resides in the same color space as the input bitmap 202 received by the encoder 204. If the source and destination of the image are defined by different color spaces, the color space of the image must be converted at some point separately from the encoder 204 and decoder 208. The result is the need for gratuitous processing for color space conversion and thus the loss of potential performance optimizations.
Accordingly, a color image codec that includes specific information about the color space in which the original input image resides and the color space in which the image is encoded would be desirable. Additionally, the ability to compress an image from any given input color space to any given compression color space would be advantageous. Further, it would be beneficial if the codec included the ability to decompress an image from any given compression color space to any given output color space.